package ar.edu.unsam.algo2.tp2.partido

import java.util.Set
import java.util.Map
import java.util.HashMap
import java.util.HashSet
import ar.edu.unsam.algo2.tp2.partido.DespachadorMails
import ar.edu.unsam.algo2.tp2.partido.Mail

class StubDespachadorMails implements DespachadorMails {
	Map<String, Set<String>> mailsEnviados
	Map<String, Set<String>> mailsRecibidos

	new() {
		mailsEnviados = new HashMap<String, Set<String>>
		mailsRecibidos = new HashMap<String, Set<String>>
	}

	override enviar(Mail mail) {
		if(mail.remitente == "" || mail.remitente == null) throw new RuntimeException("Falta remitente")
		if(mail.destinatario == "" || mail.destinatario == null) throw new RuntimeException("Falta destinatario")
		if(mail.asunto == "" || mail.asunto == null) throw new RuntimeException("Falta asunto")

		simularEnvioMail(mail.destinatario, mail.remitente, mail.mensaje)

		println(
			"Simulacion de envio:\n\tDe: " + mail.remitente + "\n\tPara: " + mail.destinatario + "\n\tMensaje: " +
				mail.mensaje)
	}

	def simularEnvioMail(String para, String de, String mensaje) {
		var mensajes = mailsPara(para)
		mensajes.add(mensaje)
		mailsEnviados.put(para, mensajes)
		mensajes = mailsDe(de)
		mensajes.add(mensaje)
		mailsRecibidos.put(de, mensajes)
	}

	def Set<String> mailsPara(String para) {
		var Set<String> mensajes = mailsEnviados.get(para)
		if (mensajes == null) {
			mensajes = new HashSet<String>
		}
		mensajes
	}

	def Set<String> mailsDe(String de) {
		var Set<String> mensajes = mailsRecibidos.get(de)
		if (mensajes == null) {
			mensajes = new HashSet<String>
		}
		mensajes
	}
}
